/**
 * worker工作后，data的其他属性原样返回
 * 所以，额外信息可放在data中，这很有用
 * 例如在处理Ai对话信息时，使用对话ID标识对话，便于主线程后续处理
 * 任何工作做完后，都要通知主线程
 */

// 解析markdown
const towxml = require("./towxml/index.js");
const DynamicBuffer = require("./dynamicBuffer.js");
const TextEncoderLib = require("./text-encoding/encoding.js");

const server = "https://www.xagsxy.icu:8085";

// 
const bufferChunk = new DynamicBuffer();
// 二进制转字符串（支持中文）
const encoder = new TextEncoderLib.TextDecoder("utf-8");


/**
 * 接受主线程消息
 */
worker.onMessage(function (res) {
  if (res.type === "towxml") {
    parseAiMarkDown(res.data);
  } else if (res.type === "article") {
    parseArticleMarkDown(res.data);
  }
});

/**
 * 解析Ai回复MarkDown
 */
function parseAiMarkDown(data) {
  if (typeof data.content === "string" && (data.content === "end" || data.content === "start")) {
    bufferChunk.clear();
    worker.postMessage({});
    return;
  }

  bufferChunk.append(data.content);

  data.reason = bufferChunk.getLast() === 4 ? "stop" : bufferChunk.getLast() === 21 ? "error" : "wait";

  data.content = towxml(
    encoder.decode(bufferChunk.getMergedBuffer()),
    "markdown"
  );

  if (data.reason !== "wait") {
    bufferChunk.clear();
  }

  worker.postMessage({
    type: "towxml",
    data
  });
}

/**
 * 文章页
 */
function parseArticleMarkDown(data) {
  if (!data.type || (data.type !== "markdown" && data.type !== "html")) {
    data.type = "markdown";
  }
  data.content = towxml(data.content, data.type, {
    base: server
  });
  worker.postMessage({
    type: "article",
    data
  });
}